博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
模板Template
阅读量:7106 次
发布时间:2019-06-28

本文共 5093 字,大约阅读时间需要 16 分钟。

模板语法: 在HTML中有两种特殊的字符:{
{ }}和 {% %}。 变量相关的用{
{}},逻辑相关的用{% %} python的模板:HTML代码+模板语法

     变量{
{name}}     

views

def template_test(request):    l = [11, 22, 33]    d = {
"name": "jerd"}return render(request, "template_test.html", {
"l": l, "d": d}

HTML

{
{l.0}}
#11
{
{l.1}}
#22
{
{d.name}}
#jerd

       过滤器Filters    

语法: {
{ value|filter_name:参数 }} '|'左右没有空格

1.返回长度 {
{ content1|length }} 2.文件大小

文件大小:{

{ file_size|filesizeformat }}

以kB MB的形式显示 是 123456789,输出将会是 117.7 MB 3.slice切片

切片:{

{ name_list|slice:"1:-1" }}

切片:{

{ name_dict.name3|slice:"1:-1" }}

4.date 格式化

时间格式化:{

{ now|date:"Y-m-d H:i:s" }}

需要在views中引入时间模块 from datetime import datetime now = datetime.now() 5.safe
Django的模板中会对HTML标签和JS等语法标签进行自动转义。1.链接:views中传给页面一个标签 a_html = "我是后端传过来的a标签"在页面接收:链接:{
{ a.html }} 在页面上不显示这个链接 链接:我是后端传过来的a标签 需要加上safe,来告诉网页这是是安全的,才能显示出来 链接:我是后端传过来的a标签 2.script script_html = "" {
{ script_html|safe }} 会在一面上一直弹出确认框
6.truncatechars

截断的字符串将以可翻译的省略号序列("...")结尾

参数:截断的字符数 {
{ content1|truncatechars:3}}

       标签{% tag %}   

1.在使用{% teg %}的时候,有开始就一定有结束

{% for i in name %}    {
% endfor %} #两者成对出现 {
% if num %} {
% endif %}{
% for foo in content %} {
% if foo > 1 %} {
{ foo }} {
% endif %}{
% endfor %}

2.if标签

if else

{% if name_list|length >= 3 %}    

需要打两辆车

{
% else %}

一辆足矣!

{
% endif %}

if elif else

{% if p3 %}    

p3:{

{ p3 }}

{
% elif p2 %}

p2:{

{ p2 }}

{
% else %}

什么人都没有!

{
% endif %}

3.for标签

1. for遍历

遍历列表
    {
    % for user in user_list %}
  • {
    { user.name }}
  • {
    % endfor %}
遍历字典{
% for key,val in dic.items %}

{

{ key }}:{
{ val }}

{
% endfor %}

2.forloop

for循环可用的一些参数: forloop.first  当前循环是不是第一次循环(布尔值) forloop.last   当前循环是不是最后一次循环(布尔值) forloop.counter    当前循环的索引值(从1开始) forloop.counter0   当前循环的索引值(从0开始) forloop.revcounter 当前循环的倒序索引值(从1开始) forloop.revcounter0    当前循环的倒序索引值(从0开始) forloop.parentloop 本层循环的外层循环
{% for key,val in dic.items %}    {
% if forloop.first %}

{

{forloop.counter }}

{
% endif %}{
% endfor %}

双层循环

{
% for name in name_list2 %} {
% for name1 in name %} {
{ forloop.parentloop.counter }} {
{ forloop.counter }} {
{ name1 }} {
% endfor %}{
% endfor %}

3.for empty 如果取得值不存在就执行empty语句

    {
    % for user in user_list %}
  • {
    { user.name }}
  • {
    % empty %}
  • 空空如也
  • {
    % endfor %}

4.with标签

使用一个简单地名字缓存一个复杂的变量

with语句

{
{ name_list2.1.1 }}{
% with name=name_list2.1.1 %} {
{ name }}{
% endwith %}

   母版{% extends 'xxx.html' %}  

1. 母版和继承       1. 为什么要有模板和继承:          把多个页面公用的部分提取出来,放在一个母版里面。          其他的页面只需要继承母版就可以了。       2. 具体使用的步骤:          1. 把公用的HTML部分提取出来,放到base.html文件中(母版名字自定义)          2. 在base.html中,通过定义block,把每个页面不同的部分区分出来          3. 在具体的页面中,先继承母版(在空的文件中继承)          4. 然后block名去指定替换母版中相应的位置       3. 使用母版和继承的注意事项:          1. {% extends 'base.html' %} --> 母版文件:base.html要加引号          2. {% extends 'base.html' %}必须放在子页面的第一行!!!          3. 可以在base.html中定义很多block,通常我们会额外定义page-css和page-js两个块          4. view.py相应的函数中返回的是对应的子页面文件 不是不是不是 base.html         4.继承母版后,所有要在页面山上显示的内容都要放到{% block book %}{% endblock %}中,在块内容外的内容该不会显示 我们通常会在母板中定义页面专用的CSS块和JS块,方便子页面替换。
  
Title #放置每个页面的css代码 {
% block page-css %} {
% endblock %}

这是母板的标题

{
% block page-main %}{
% endblock %}

母板底部内容

#放置每个页面的js代码{
% block page-js %}{
% endblock %}
View Code

    组件 {% include 'xx.html' %}    

 
可以将常用的页面内容如导航条,页尾信息等组件保存在单独的文件中,然后在需要使用的地方按如下语法导入即可。 {% include 'navbar.html' %} navbar.html放要显示的内容,这个html文件是不完整的,没有head,body部分,不能单独使用
 

    静态文件相关   

静态文件操作,当配置文件中STATIC_URL = '/static/'别名更改时,需要把项目中的静态文件href="/static/都改变,比较麻烦 使用以下代码,当别名改变也无影响
{% load static %}

自定义标签和过滤器

1.在app中创建templatetags模块(模块名只能是templatetags) 2.创建任意 .py 文件,如:mysimpletag.py
from django import templatefrom django.utils.safestring import mark_saferegister = template.Library()  # register的名字是固定的,不可改变 告诉Django的模板语言我现在有一个自定义的filter方法,名字叫addstr@register.filter(name="addstr")def add_str(arg, arg2):    第一个参数永远是管道符前面那个变量    :param arg: 道符前面那个变量    :param arg2: 冒号后面的变量    :return:    return "{} {}.".format(arg, arg2)3.使用自定义filter(在HTML中操作){# 先导入我们自定义filter那个文件 #}{
% load mysimpletags %}{# 使用我们自定义的filter #}{
{ name|addstr:"hello~" }}{
{ name|addstr}}4.定义完后要重新开服务,不然报错@register.simple_tag(name="add")def add_str(a,b): return "执行mysimpletag的结果是:{} {}".format(a,b)2.在HTML中使用{
% load mysimpletag %} #导入文件{
% add "1" "2" %} #使用的是逻辑符号,参数之间没有逗号content1="等闲变却故人心,却道姑人心易变"{
% add content1 "骊山语罢清宵半" %} #content1是后台传到页面上的内容,对这个变量就行操作
View Code
django的模板中filter和simple_tag的区别?
自定义filter:{
{ 参数1|filter函数名:参数2 }} 1.可以与if标签来连用 2.自定义时需要写两个形参 simple_tag:{% simple_tag函数名 参数1 参数2 %} 1.可以传多个参数,没有限制 2.不能与if标签来连用

某个文件多处被用到可以存为一个变量

{% load static %}banner_8.jpg 这个文件常用到,为其设置别名img1,以后用时直接用img1{
% static "img/banner_8.jpg" as img1 %} #要使用变量符号

转载于:https://www.cnblogs.com/zgf-666/p/9221118.html

你可能感兴趣的文章
酷狗音乐快速转换MP3格式的方法
查看>>
原生JS 实现复杂对象深拷贝(对象值包含函数)
查看>>
优化体系结构 - 算法外置优化计算结构
查看>>
jqGrid的rowNum属性默认值、-1情况的介绍
查看>>
你应该知道的数据库数据类型及其设计原则
查看>>
解决vue报错Failed to mount component
查看>>
[LeetCode] 124. Binary Tree Maximum Path Sum
查看>>
活学活用! 用Local Storage实现多人聊天室
查看>>
一次爬虫实践记录
查看>>
炫酷粒子表白,双十一脱单靠它了!
查看>>
mysql锁以及实践总结
查看>>
【工具】MongoDB 与可视化工具 adminMongo 的安装、启动与连接
查看>>
Javascript--常用方法
查看>>
Swoft之服务注册发现Consul服务器配置
查看>>
[译]迁移到新的 React Context Api
查看>>
IM 推送保障及网络优化详解(二):如何做长连接加推送组合方案
查看>>
webpack4 踩坑记
查看>>
线程池你真不来了解一下吗?
查看>>
【跃迁之路】【424天】程序员高效学习方法论探索系列(实验阶段181-2018.04.05)...
查看>>
火狐放不了html5 video MP4格式
查看>>